package dycloud.GameName.User.service;


import dycloud.GameName.User.model.Json_UserDataInfo;
import dycloud.GameName.User.model.Json_UserInfo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

@Service
@Slf4j
public class UserInfoService {

    @Resource
    private MongoTemplate mongoTemplate;

    /**
     * 检查用户是否存在，如果不存在，则插入新的用户信息。
     *
     */
    public Json_UserInfo checkAndInsertUserInfo(Json_UserInfo userInfo) {
        try {
            // 根据 playid 查询是否已经有该用户
            Query query = new Query();
            query.addCriteria(Criteria.where("playid").is(userInfo.getPlayid()));
            Json_UserInfo existingUserInfo = mongoTemplate.findOne(query, Json_UserInfo.class);

            // 如果不存在该用户，则插入新用户数据
            if (existingUserInfo == null) {
                mongoTemplate.insert(userInfo);
                log.info("UserService 35 --->existingUserInfo  is  null --<    playid: {}", userInfo.getPlayid());
            } else {
                log.info("UserService 37 --->existingUserInfo not null --<   playid: {}", userInfo.getPlayid());
            }

            return userInfo;
        } catch (Exception e) {
            log.error("UserService 42 ，playid: {}", userInfo.getPlayid(), e);
            return null;  // 可以根据需求返回错误信息或抛出异常
        }
    }


    /**
     * 获取用户数据，如果不存在，则初始化并插入该玩家数据。
     *
     * @param playid 用户的唯一标识
     * @return 用户数据
     */
    public Json_UserDataInfo getUserDataInfo(String playid) {
        try {
            // 查询用户数据
            Query query = new Query();
            query.addCriteria(Criteria.where("playid").is(playid));
            Json_UserDataInfo userDataInfo = mongoTemplate.findOne(query, Json_UserDataInfo.class);

            // 如果用户数据不存在，则初始化并插入
            if (userDataInfo == null) {
                userDataInfo = new Json_UserDataInfo();
                userDataInfo.setPlayid(playid);
                userDataInfo.setWinCount(0);
                userDataInfo.setWorldRank(0);

                mongoTemplate.insert(userDataInfo);
                log.info("UserService 69 --->userDataInfo  is null <----，playid: {}", playid);
            }else {
                log.info("UserService 71 --->userDataInfo  not  null <----，playid: {}", userDataInfo.getPlayid());
                log.info("UserService 72 --->userDataInfo  not  null <----，winCount: {}", userDataInfo.getWinCount());
            }
            log.info("UserService 74 --->userDataInfo<----，winCount: {}", userDataInfo.getWinCount());
            return userDataInfo;
        } catch (Exception e) {
            log.error("UserService 77 --->userDataInfo error <----");
            return null;  // 可以根据需求返回错误信息或抛出异常
        }
    }

    /**
     * 设置用户的连胜点。
     * 如果用户数据不存在，则初始化并插入该用户数据。
     *
     * @param playid   用户的唯一标识
     * @param winCount 连胜点数
     */
    public boolean setUserWinCount(String playid, long winCount) {
        try {
            // 查询用户数据
            Query query = new Query();
            query.addCriteria(Criteria.where("playid").is(playid));
            Json_UserDataInfo userDataInfo = mongoTemplate.findOne(query, Json_UserDataInfo.class);

            // 如果用户数据存在，更新连胜点
            if (userDataInfo != null) {
                userDataInfo.setWinCount(winCount);
                mongoTemplate.save(userDataInfo);  // 更新用户数据
                log.info("100:Update  playid{}  ---> winCount:{} <---", playid, winCount);

            } else {
                // 如果用户数据不存在，初始化并插入
                userDataInfo = new Json_UserDataInfo();
                userDataInfo.setPlayid(playid);
                userDataInfo.setWinCount(winCount);  // 设置初始连胜点
                userDataInfo.setWorldRank(0);  // 设置默认排名为 0（如果需要）
                mongoTemplate.insert(userDataInfo);  // 插入新的用户数据
                log.info("109:user is null  playid{}  ---> winCount:{} <---", playid, winCount);

            }
            return true;
        } catch (Exception e) {
            log.error("set  winCount  error", playid, e);
            return false;
        }
    }

    public long getUserWinCount(String playid) {
        try {
            // 查询用户数据
            Query query = new Query();
            query.addCriteria(Criteria.where("playid").is(playid));
            Json_UserDataInfo userDataInfo = mongoTemplate.findOne(query, Json_UserDataInfo.class);

            // 如果用户数据存在，返回连胜点
            if (userDataInfo != null) {
                log.info("128: return playid{}  --->winCount:{}<----", playid, userDataInfo.getWinCount());
                return userDataInfo.getWinCount();
            } else {
                // 用户数据不存在，返回 0 或者其他默认值
                log.warn("132:userDataInfo is null   playid -->{}", playid);
                return 0;
            }
        } catch (Exception e) {
            log.error("getWinCOunt  error   playID:{}", playid, e);
            return 0;  // 返回默认值或处理错误
        }
    }

}
